home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
FM Towns: Free Software Collection 7
/
FM Towns Free Software Collection 7.iso
/
taropyon
/
hewin
/
ccisrc
/
mktags.cci
< prev
next >
Wrap
Text File
|
1993-11-30
|
5KB
|
211 lines
/*************************************************************************
* "mktags.cci" : 関数の定義位置を見つけ出す
*************************************************************************/
char _mktags_mode;
char *_mktags_fp;
#define _MKTAGS_MODE _mktags_mode
#define _MKTAGS_FP _mktags_fp
#define _MKTAGS_PTN "^[A-Za-z_].*[ \\t]*[\\*A-Za-z_].*(.*)\\|^#[ \\t]*define[ \\t]*[A-Za-z_].*(.*)"
/* ファイル出力 */
int _mktags_main_file(char *fn)
{
char *fp;
char buf[512], tmp[128];
int ret, pos, len, ln, ch, ec;
char *reptn;
sprintf( tmp,"---------- %s ----------\r\n", fn );
if ( (reptn = RePtnAlloc(_MKTAGS_PTN,0)) == NULL )
return (ERR);
DCN_puts( DCNPTR, tmp );
fputs( tmp, _MKTAGS_FP );
if ( (fp = FM_fopen(fn,"rb")) == NULL )
{ RePtnFree( reptn );
return (ERR);
}
ret = 0;
ln = 0;
while ( fgets(buf,512,fp) != NULL )
{
++ln;
if ( RePtnMatch2( reptn, buf, &pos, &len) > 0 && pos == 0 )
{ /* match */
sprintf( tmp, "%-14s %d: ", fn, ln );
fputs( tmp, _MKTAGS_FP);
fputs( buf, _MKTAGS_FP);
}
if ( getkey(&ec) == '\x1B' || (ec&0xFF14) == KA_CANCEL )
{ DCN_puts( DCNPTR, "<<<BREAK>>>\r\n" );
ret = 1;
break;
}
}
FM_fclose(fp);
RePtnFree( reptn );
return (ret);
}
/* 画面表示 */
int _mktags_main_scn(char *fn)
{
char *fp;
char buf[512], tmp[128];
int ret, pos, len, ln, ch, ec;
char *reptn;
sprintf( tmp,"---------- %s ----------\r\n", fn );
if ( (reptn = RePtnAlloc(_MKTAGS_PTN,0)) == NULL )
return (ERR);
DCN_puts(DCNPTR,tmp);
if ( (fp = FM_fopen(fn,"rb")) == NULL )
{ RePtnFree( reptn );
return (ERR);
}
ret = 0;
ln = 0;
while ( fgets(buf,512,fp) != NULL )
{ ++ln;
if ( RePtnMatch2( reptn, buf, &pos, &len) > 0 && pos == 0 )
{ /* match */
sprintf( tmp, "%-14s %d: ", fn, ln );
DCN_puts(DCNPTR, tmp);
DCN_puts(DCNPTR, buf);
}
if ( getkey(&ec) == '\x1B' || (ec&0xFF14) == KA_CANCEL )
{ DCN_puts(DCNPTR, "<<<BREAK>>>\r\n");
ret = 1;
break;
}
}
FM_fclose(fp);
RePtnFree( reptn );
return (ret);
}
int _mktags_extract( char *wild )
{
char buf[64];
int ret, cnt;
#if 0
sprintf( buf, "[wild:%s]\r\n", wild );
DCN_puts(DCNPTR, buf);
#endif
cnt = 0;
ret = FM_findfirst( wild, 0, buf );
while ( ret == 0 )
{
++cnt;
#ifdef _TAROPYON_SYSTEM
if ( FS_cmpfnam( buf, "newhewin.cci") )
{ /* "newhewin.cci" は処理しない */
#endif
if ( _MKTAGS_MODE )
ret = _mktags_main_file( buf );
else
ret = _mktags_main_scn( buf );
#ifdef _TAROPYON_SYSTEM
}
#endif
if ( ret > 0 )
break; /* 中断 */
ret = FM_findnext( buf );
}
return (cnt > 0 ? NORMAL : ERR);
}
int MkTags( int argc, char **argv)
{
int i;
char *s;
if ( _MKTAGS_MODE )
{ if ( (_MKTAGS_FP = FM_fopen("tags","wb")) == NULL )
return (ERR);
}
for ( i = 1; i < argc; ++i )
{ s = argv[i];
if ( *s == '-' || *s == '/' )
{ /* option */
} else
{ _mktags_extract( s );
}
}
if ( _MKTAGS_MODE )
FM_fclose(_MKTAGS_FP);
return (NORMAL);
}
/*************************************************************************
* 関数定義位置を表示する
*************************************************************************/
int _dcn_searchFunction( char *dcn )
{
int i, ret;
int argc;
char **argv;
char *para;
ret = MNU_sure ( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN,
C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY), SELBTN_ATT_LEFT,
" カレントディレクトリの 拡張子 .H .C .CCI ファイルから、 \n 関数定義,マクロ定義位置を探します。"
);
if ( ret != MENU_SURE_OK )
return (ERR);
_MKTAGS_MODE = 0;
DCNPTR = dcn;
DCN_puts(DCNPTR,"\r\n");
para = "mktags *.h *.c *.cci";
argc = FS_argSet(para,&argv);
if ( argc > 0 )
{ MkTags( argc, argv );
FS_argClear( argc, argv );
}
return (DCNCMD_PROMPT);
}
/*************************************************************************
* "tags" ファイルを作成
*************************************************************************/
int _dcn_mktags( char *dcn )
{
int i, ret;
int argc;
char **argv;
char *para;
ret = MNU_sure ( DLGPOS_CENTER_OF_SCN, DLGPOS_CENTER_OF_SCN,
C_MBLACK, C_DLGBASE, COLMIX(C_INFO,C_GRAY), SELBTN_ATT_LEFT,
" カレントディレクトリの 拡張子 .H .C .CCI ファイルから、 \n \x22tags\x22ファイルを作成します。"
);
if ( ret != MENU_SURE_OK )
return (ERR);
_MKTAGS_MODE = 1;
DCNPTR = dcn;
DCN_puts(DCNPTR,"\r\n");
para = "mktags *.h *.c *.cci";
argc = FS_argSet(para,&argv);
if ( argc > 0 )
{ MkTags( argc, argv );
FS_argClear( argc, argv );
}
return (DCNCMD_PROMPT);
}
#undef _MKTAGS_MODE
#undef _MKTAGS_FP
#undef _MKTAGS_PTN